package com.example.xiao.httpprocessor.HttpProcessor

import com.google.gson.Gson
import java.lang.reflect.ParameterizedType
import java.lang.reflect.Type
import java.util.*

/*
 *回调接口的实现
 * Result的类型是未知的，通过反射来处理泛型
 * 对返回数据进行处理（json格式）
 */
abstract class HttpCallback<Result> : ICallBack{

    override fun onSuccess(result: String) {
        var gson = Gson()
        //clz为用户输入的类型，如该类是String类，就返回String类
        var clz: Class<*> = analysisClassInfo(this)
        var objResult: Result = gson.fromJson(result,clz) as Result
        //将处理的结果返回调用者
        onSuccess(objResult)
    }

    override fun onFailure(e: String) {

    }


    public abstract fun onSuccess(result: Result)

    companion object {
        private fun analysisClassInfo(any: Any): Class<*>{
            //getGenericSuperclass()可以得到该类包含的原始类型，参数化类型，数组类型，类型变量，基本数据类型
            var getType: Type = any.javaClass.genericSuperclass
            //获取Result的参数化类型
            var params: Array<Type> = (getType as ParameterizedType).actualTypeArguments
            return params[0] as Class<*>
        }
    }
}